/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Action;

import ActionForm.mobPedidoActionForm;
import BE.Producto;
import BL.LogBL;
import BL.ModuloBL;
import BL.PedidoBL;
import BL.SeveridadBL;
import BL.TipoOperacionBL;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.actions.LookupDispatchAction;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import java.util.*;
import javax.servlet.http.HttpSession;

/**
 *
 * @author dennis
 */
public class mobPedidoAction extends LookupDispatchAction {
    
    /* forward name="success" path="" */
    private final static String SUCCESS = "success";
    
    /** Provides the mapping from resource key to method name.
     * @return Resource key / method name map.
     */
    protected Map getKeyMethodMap() {
      Map map = new HashMap();
      map.put("button.EliminarLineaPedido", "eliminarLineaPedido");
      map.put("button.ModificarLineaPedido","modificarLineaPedido");
      map.put("button.TerminarPedido","terminarPedido");
      return map;
    }
    
    /** Action called on Add button click
     */

    public ActionForward eliminarLineaPedido(ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response) throws java.lang.Exception {
      // TODO: implement add method

      int intIndice= Integer.parseInt(request.getParameter("indiceEliminar"));

      HttpSession session = request.getSession();

      List<Producto> arrDetallePedido = (List<Producto>)session.getAttribute("arrLineaPedido");

      arrDetallePedido.remove(intIndice);

      List<String> arrCantidad = (ArrayList<String>) session.getAttribute("arrCantidades");

      arrCantidad.remove(intIndice);

      List<String> arrPrecio = (ArrayList<String>) session.getAttribute("arrPrecio");

      arrPrecio.remove(intIndice);


      session.removeAttribute("arrLineaPedido");
      session.removeAttribute("arrCantidades");

      session.setAttribute("arrLineaPedido",arrDetallePedido);
      session.setAttribute("arrCantidades",arrCantidad);

      return mapping.findForward("mostrarDetallePedido");
    }

    public ActionForward modificarLineaPedido(ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response) throws java.lang.Exception {

          HttpSession session = request.getSession();

          session.setAttribute("arrProductosBusqueda", session.getAttribute("arrLineaPedido"));

          return mapping.findForward("modificarLineaPedido");

    }

   public ActionForward terminarPedido(ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response) throws java.lang.Exception {
      
      mobPedidoActionForm objPedidoForm = new mobPedidoActionForm(request);
      HttpSession session = request.getSession();
      Date fecha_pedido= new Date();
      Date fecha=new Date();

      if (Integer.parseInt(objPedidoForm.getCmbFormaPago())==0)
      {
          request.setAttribute("strMensaje", "Selecciona una forma de Pago");
          return mapping.findForward("mostrarDetallePedido");

      }
      try {
          fecha_pedido.setDate(Integer.parseInt(objPedidoForm.getCmbDia()));
          fecha_pedido.setYear(Integer.parseInt(objPedidoForm.getCmbAnio())-1900);
          fecha_pedido.setMonth(Integer.parseInt(objPedidoForm.getCmbMes())-1);
          fecha_pedido.setHours(24);
          fecha_pedido.setMinutes(59);
          fecha_pedido.setSeconds(59);
          if (fecha_pedido.compareTo(fecha)<0) {
          request.setAttribute("strMensaje", "Error en las fechas, La fecha de entrega no puede ser menor a hoy día");
          return mapping.findForward("mostrarDetallePedido");
          }


      }
      catch (Exception e) {
          request.setAttribute("strMensaje", "Error en las fechas, debe ingresar un valor válido");
          return mapping.findForward("mostrarDetallePedido");
      }


        List<Producto> vectorProducto=null;
        if(session.getAttribute("arrLineaPedido")!=null) {
            vectorProducto=(List<Producto>)session.getAttribute("arrLineaPedido");
        }


        List<String> arrCantidad=null;

        if(session.getAttribute("arrCantidades")!=null)
        {
            arrCantidad = (ArrayList<String>)session.getAttribute("arrCantidades");
        }
        
         List<String> arrPrecio=null;

        if(session.getAttribute("arrPrecio")!=null)
        {
            arrPrecio = (ArrayList<String>)session.getAttribute("arrPrecio");
        }
         int id_cliente=Integer.parseInt((String)session.getAttribute("IdCliente"));
         int id_vendedor = (Integer) session.getAttribute("uid");
         /*
          int[] listaProductos = new int[vectorProducto.size()];
         for (int i=0;i<vectorProducto.size();i++)
         {
             listaProductos[i]=vectorProducto.get(i).getSrlIdproducto();
         }
         int[] listaCantidades = new int[arrCantidad.size()];
         for (int i=0;i<arrCantidad.size();i++)
         {
             listaCantidades[i]=Integer.parseInt(arrCantidad.get(i));
         }
         double[] listaPrecio = new double[arrPrecio.size()];
         for (int i=0;i<arrPrecio.size();i++)
         {
             listaPrecio[i]=Double.parseDouble(arrPrecio.get(i));
         }
          */
         String listaProductos = "";
         String listaCantidades = "";
         String listaPrecio = "";
         for (int i=0;i<vectorProducto.size();i++)
         {
             if (i==vectorProducto.size()-1)
             {

                 listaProductos=listaProductos+vectorProducto.get(i).getSrlIdproducto()+"";
                 listaCantidades=listaCantidades+Integer.parseInt(arrCantidad.get(i))+"";
                 listaPrecio=listaPrecio+Double.parseDouble(arrPrecio.get(i))+"";
             }

             else
             {
                 listaProductos=listaProductos+vectorProducto.get(i).getSrlIdproducto()+",";
                 listaCantidades=listaCantidades+Integer.parseInt(arrCantidad.get(i))+",";
                 listaPrecio=listaPrecio+Double.parseDouble(arrPrecio.get(i))+",";

             }
         }

      PedidoBL objPedidoBL= new PedidoBL();
      Integer resul=objPedidoBL.RegistrarPedido(id_cliente,id_vendedor,Integer.parseInt(objPedidoForm.getCmbFormaPago()),listaProductos, listaCantidades, listaPrecio, Integer.parseInt(objPedidoForm.getCmbDia()),Integer.parseInt(objPedidoForm.getCmbMes()),Integer.parseInt(objPedidoForm.getCmbAnio()));
      LogBL.GenerarLog(request, ModuloBL.modules.VENTASMOVILES.ordinal(), SeveridadBL.nivel.AVISO.ordinal(), TipoOperacionBL.tipo.CREAR.ordinal(), "Registrar Pedido", "Se registra un pedido por el movil");

      if (resul>0){
          request.setAttribute("strMensaje", "Pedido Realizado con Exito");
          return mapping.findForward("mobMenuPrincipal");
      }
      else
      {   if (resul==-1) request.setAttribute("strMensaje", "Error en Linea de Credito");
          if (resul==-2) request.setAttribute("strMensaje", "Error, no hay Almacen");
          if (resul==-3) request.setAttribute("strMensaje", "Error, no hay Stock");
          if (resul==-4) request.setAttribute("strMensaje", "Error en Registrar Pedido");
          return mapping.findForward("mostrarDetallePedido");
      
      }



      
    }
}